home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 001-100 / 001-025 / 002 / make / getdir.c < prev    next >
C/C++ Source or Header  |  1995-03-17  |  2KB  |  118 lines

  1. #include "lar.h"
  2.  
  3. #if unix || AMIGA
  4. #  include "make.h"        /* To pick up remappings */
  5. #endif
  6.  
  7. void getdir (f)
  8. fildesc f;
  9. {
  10.     extern int nslots;
  11.     extern struct ludir ldir[MAXFILES];
  12.     char *getname ();
  13.     static void error ();
  14.  
  15.     DBUG_ENTER ("getdir");
  16.     lseek (f, 0L, 0);        /* rewind f */
  17.     if (_read (f, (char *) & ldir[0], DSIZE) != DSIZE) {
  18.     error ("No directory\n");
  19.     }
  20.     if (!equal (getname ((char *)ldir[0].l_name, (char *)ldir[0].l_ext),"larformt.arc")) {
  21.     error ("This is not a LAR format archive!!");
  22.     }
  23.     if (lwtol (ldir[0].l_datetime) != -1L) {
  24.     error ("This is not a LAR format archive!!");
  25.     }
  26.     nslots = (int) (lwtol (ldir[0].l_len) / DSIZE);
  27.     if (_read (f, (char *) & ldir[1], DSIZE * nslots) != DSIZE * nslots) {
  28.     error ("Can't read directory - is it a library?");
  29.     }
  30.     DBUG_VOID_RETURN;
  31. }
  32.  
  33. /* convert nm.ex to a Unix style string */
  34. char *getname (nm, ex)
  35. char *nm;
  36. char *ex;
  37. {
  38.     static char namebuf[14];
  39.     register char *cp;
  40.     register char *dp;
  41.     register char *ocp;
  42.  
  43.     DBUG_ENTER ("getname");
  44.     for (cp = namebuf, dp = nm; *dp != ' ' && dp != nm + 8;) {
  45.     *cp++ = isupper (*dp) ? tolower (*dp++) : *dp++;
  46.     }
  47.     *cp++ = '.';
  48.     ocp = cp;
  49.     for (dp = ex; *dp != ' ' && dp != ex + 3;) {
  50.     *cp++ = isupper (*dp) ? tolower (*dp++) : *dp++;
  51.     }
  52.     if (cp == ocp) {        /* no extension */
  53.     --cp;            /* eliminate dot */
  54.     }
  55.     *cp = '\0';
  56.     DBUG_RETURN (namebuf);
  57. }
  58.  
  59. void cant (name)
  60. char *name;
  61. {
  62. #ifdef unix
  63.     extern int errno;
  64.     extern char *sys_errlist[];
  65. #endif
  66.  
  67.     fputs (name, stderr);
  68.     fputs (": ", stderr);
  69. #ifdef unix
  70.     fputs (sys_errlist[errno], stderr);
  71. #else
  72.     fputs ("<unknown error>", stderr);
  73. #endif
  74.     fputs ("\n", stderr);
  75.     fflush (stderr);
  76.     exit (1);
  77. }
  78.  
  79. void error (str)
  80. char *str;
  81. {
  82.     fputs ("lar: ", stderr);
  83.     fputs (str, stderr);
  84.     fputs ("\n", stderr);
  85.     fflush (stderr);
  86.     exit (1);
  87. }
  88.  
  89. /*
  90.  * This itoa doesn't call in the floating point library:
  91.  *   CI C86 does an sprintf!
  92.  */
  93.  
  94. void itoa (val, buf)
  95. int val;
  96. char *buf;
  97. {
  98.     register int i;
  99.     register int j;
  100.     auto char tbuf[10];
  101.  
  102.     if (val == 0) {
  103.     buf[0] = '0';
  104.     buf[1] = '\0';
  105.     return;
  106.     }
  107.     i = 9;
  108.     while (val != 0) {
  109.     tbuf[i--] = (val % 10) + '0';
  110.     val /= 10;
  111.     }
  112.     i++;
  113.     for (j = 0; i <= 9; i++, j++) {
  114.     buf[j] = tbuf[i];
  115.     }
  116.     buf[j] = '\0';
  117. }
  118.